home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #1 / Amiga Plus CD - 1996 - No. 1.iso / pd / netz / xbtx_v1.1 / main.cpp < prev    next >
C/C++ Source or Header  |  1995-09-26  |  11KB  |  392 lines

  1. /*
  2. **    $Id: Main.cpp 1.5 1995/09/26 19:45:11 olsen Exp olsen $
  3. **
  4. **    :ts=4
  5. */
  6.  
  7. /*
  8.  * Copyright © 1995 by Olaf Barthel, All Rights Reserved
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
  20.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  21.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
  22.  * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  24.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  25.  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  26.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  27.  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  28.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  *
  30.  * This software has not been validated by the ``Bundesamt fuer Zulassungen in
  31.  * der Telekommunikation'' of the ``Deutsche Bundepost Telekom'' and thus
  32.  * must not be used for accessing the BTX-Network of the Telekom in Germany.
  33.  *
  34.  * Diese Software hat keine Zulassung durch das Bundesamt fuer Zulassungen in
  35.  * der Telekommunikation der Deutschen Bundespost Telekom und darf daher nicht
  36.  * am Netz der Deutschen Bundespost Telekom in Deutschland betrieben werden.
  37.  */
  38.  
  39. #include "Application.hpp"
  40.  
  41. #include <dos/dosextens.h>
  42. #include <dos/rdargs.h>
  43.  
  44. #include <clib/dos_protos.h>
  45. #include <clib/utility_protos.h>
  46.  
  47. #ifdef __SASC
  48. #include <pragmas/dos_pragmas.h>
  49. #include <pragmas/utility_pragmas.h>
  50.  
  51. extern struct Library        *UtilityBase;
  52. extern struct DosLibrary    *DOSBase;
  53. #endif    // __SASC
  54.  
  55. #include <stdlib.h>
  56. #include <string.h>
  57. #include <stddef.h>
  58. #include <stdio.h>
  59.  
  60. #ifdef __SASC
  61. char *verstag = "\0$VER: xBTX 1.1 " __AMIGADATE__ "\r\n";
  62. #else
  63. char *verstag = "\0$VER: xBTX 1.1 (26.09.95)\r\n";
  64. #endif    // __SASC
  65.  
  66. #define TEMPLATE    "DEVICE/K,UNIT/K/N,BAUD/K/N,RTSCTS/K,INIT/K,DIAL/K,NUMBER/K,HANGUP/K,FILE/K,SCALEX/K/N,SCALEY/K/N,TEXT/S,SCREEN=PUBSCREEN/K,DIRECT/S"
  67.  
  68. enum    {    ARG_DEVICE,ARG_UNIT,ARG_BAUD,ARG_RTSCTS,ARG_INIT,ARG_DIAL,
  69.             ARG_NUMBER,ARG_HANGUP,ARG_FILE,ARG_SCALEX,ARG_SCALEY,ARG_TEXT,
  70.             ARG_PUBSCREEN,ARG_DIRECT,
  71.             ARGCOUNT
  72.         };
  73.  
  74. /****** XBTX/XBTX ***********************************************************
  75. *
  76. *   NAME
  77. *       XBTX -- BTX/Datex-J decoder (V39)
  78. *
  79. *   SYNOPSIS
  80. *       DEVICE/K,UNIT/K/N,BAUD/K/N,RTSCTS/K,INIT/K,DIAL/K,NUMBER/K,HANGUP/K,
  81. *           FILE/K,SCALEX/K/N,SCALEY/K/N,TEXT/S,SCREEN=PUBSCREEN/K,DIRECT/S
  82. *
  83. *   FUNCTION
  84. *       XBTX is a BTX/Datex-J decoder developed by Arno Augustin and
  85. *       Frank Höring at the University of Erlangen-Nuremberg, Germany.
  86. *       This Amiga version is based upon the original X-Windows
  87. *       implementation, it adds Telesoftware 3-in-4 format download
  88. *       capabilities.
  89. *
  90. *   REQUIREMENTS
  91. *       XBTX requires Amiga operating system v3.0 or higher, an Amiga
  92. *       equipped with at least an MC68020 CPU and if possible video
  93. *       hardware capable of displaying at least 60 distinctly different
  94. *       colours. If XBTX is unable to allocate at least 60 colours for
  95. *       use, it will fall back to a text-only display. Your Amiga better
  96. *       be real fast, as the BTX font conversion routines are dog slow.
  97. *       XBTX must be started from Shell, it does not run from Workbench yet.
  98. *
  99. *   INPUTS
  100. *       DEVICE/K
  101. *           Amiga device driver to use, default is "serial.device".
  102. *
  103. *       UNIT/K/N
  104. *           Amiga device unit number to use, default is 0.
  105. *
  106. *       BAUD/K/N
  107. *           Baud rate to use; if not specified the default baud rate
  108. *           of the device driver will be used.
  109. *
  110. *       RTSCTS/K
  111. *           Turn RTS/CTS handshaking on or off; if not specified the
  112. *           default hardware handshaking mode of the device driver
  113. *           will be used.
  114. *
  115. *       INIT/K
  116. *           Modem initialization command, default is "ATE1V1Q0^M".
  117. *
  118. *       DIAL/K
  119. *           Modem dialing command to use, default is "~~ATD".
  120. *
  121. *       NUMBER/K
  122. *           Phone number to dial in order to connect to the Datex-J
  123. *           service, default is "01910".
  124. *
  125. *       HANGUP/K
  126. *           Modem hang up command to use, default is "~~+++~~ATH0^M".
  127. *
  128. *       FILE/K
  129. *           Name of prerecorded file to playback.
  130. *
  131. *       SCALEX/K/N
  132. *           Factor by which to scale the display in the horizontal
  133. *           direction, must be between 1 and 8; default is 1. This
  134. *           only works with the graphics display.
  135. *
  136. *       SCALEY/K/N
  137. *           Factor by which to scale the display in the vertical
  138. *           direction, must be between 1 and 8; default is 1. This
  139. *           only works with the graphics display.
  140. *
  141. *       TEXT/S
  142. *           Use the text-only display.
  143. *
  144. *       SCREEN=PUBSCREEN/K
  145. *           Open the display on the named public screen.
  146. *
  147. *       DIRECT/S
  148. *           Build screen characters directly on the screen, do not use
  149. *           a temporary offscreen buffer. Will save some memory and may
  150. *           increase on-screen rendering speed, but then maybe not.
  151. *
  152. *   MODEM COMMANDS
  153. *       You can include simple control sequences in the modem commands.
  154. *       The tilde (~) causes a delay of about a second. Prefixing a
  155. *       character with a caret (^) will turn it into a control code,
  156. *       for example ^M gives a carriage return (or Control-M).
  157. *
  158. *   EXAMPLE
  159. *       Dial into the fast modem service with RTS/CTS handshaking
  160. *       enabled:
  161. *           xbtx rtscts=on number=051119304
  162. *
  163. *       Dial into the slow modem service with RTS/CTS handshaking
  164. *       disabled:
  165. *           xbtx rtscts=off
  166. *
  167. *       Open a text-only display on the `term' public screen:
  168. *           xbtx text screen=term
  169. *
  170. *   NOTES
  171. *       This software has not been validated or approved by the
  172. *       "Bundesamt für Zulassungen in der Telekommunikation" of the
  173. *       "Deutsche Bundepost Telekom" and thus must not be used for
  174. *       accessing the BTX-Network of the Telekom in Germany. It is
  175. *       provided solely for educational purposes only.
  176. *
  177. *       This software is provided by the authors "as is" and any
  178. *       express or implied warranties, including, but not limited
  179. *       to, the implied warranties of merchantability and fitness
  180. *       for a particular purpose are disclaimed. In no event shall
  181. *       the authors be liable for any direct, indirect, incidental,
  182. *       special, exemplary, or consequential damages (including,
  183. *       but not limited to, procurement of substitute goods or
  184. *       services; loss of use, data, or profits; or business
  185. *       interruption) however caused and on any theory of
  186. *       liability, whether in contract, strict liability, or tort
  187. *       (including negligence or otherwise) arising in any way out
  188. *       of the use of this software, even if advised of the
  189. *       possibility of such damage.
  190. *
  191. *       You have been warned, kids.
  192. *
  193. *
  194. *       Incidentally, this is my first major attempt at C++
  195. *       programming. Any changes I made to the code are
  196. *       really © Copyright 1995 by Olaf Barthel.
  197. *
  198. *   BUGS
  199. *       The font decoding and output routines are neither blazingly
  200. *       fast, nor shockingly well designed, but they get the job
  201. *       done. Flashing characters are not supported (yet). The
  202. *       Telesoftware download routines do not support the eight bit
  203. *       transparency mode as the specifications were a bit thin.
  204. *       Concealed characters are always revealed, there is no option
  205. *       to have them concealed.
  206. *
  207. *   AUTHORS
  208. *       Arno Augustin, University of Erlangen-Nuremberg,
  209. *           (aoaugust@cip.informatik.uni-erlangen.de)
  210. *
  211. *       Frank Höring, University of Erlangen-Nuremberg,
  212. *           (fkhoerin@cip.informatik.uni-erlangen.de)
  213. *
  214. *       Olaf Barthel
  215. *           (olsen@sourcery.han.de)
  216. *
  217. *   SEE ALSO
  218. *       "Functional Specification for BTX-Terminals", DBP Telekom
  219. *       xbtx - a Bildschirmtext-decoder for the X-Window system
  220. *
  221. *****************************************************************************
  222. *
  223. */
  224.  
  225. void
  226. main(int argc,char **argv)
  227. {
  228.     if(argc)
  229.     {
  230.         extern struct DosLibrary *DOSBase;
  231.  
  232.         if(DOSBase -> dl_lib . lib_Version >= 39)
  233.         {
  234.             struct RDArgs    *Args;
  235.             STRPTR             Array[ARGCOUNT];
  236.  
  237.             memset(Array,0,sizeof(Array));
  238.  
  239.             if(Args = ReadArgs(TEMPLATE,(LONG *)Array,NULL))
  240.             {
  241.                 Application    App;
  242.                 STRPTR        Device;
  243.                 LONG        Unit;
  244.                 LONG        Baud;
  245.                 BOOL        RTS_CTS;
  246.                 BOOL        TextOnly;
  247.                 BOOL        Direct;
  248.                 STRPTR        Init;
  249.                 STRPTR        Dial;
  250.                 STRPTR        Number;
  251.                 STRPTR        Hangup;
  252.                 STRPTR        File;
  253.                 LONG        ScaleX,
  254.                             ScaleY;
  255.                 STRPTR        Screen;
  256.                 STRPTR        Error;
  257.  
  258.                 if(Array[ARG_DEVICE])
  259.                     Device = Array[ARG_DEVICE];
  260.                 else
  261.                     Device = "serial.device";
  262.  
  263.                 if(Array[ARG_UNIT])
  264.                     Unit = *(LONG *)Array[ARG_UNIT];
  265.                 else
  266.                     Unit = 0;
  267.  
  268.                 if(Array[ARG_BAUD])
  269.                     Baud = *(LONG *)Array[ARG_BAUD];
  270.                 else
  271.                     Baud = 0;
  272.  
  273.                 if(Array[ARG_RTSCTS])
  274.                 {
  275.                     STATIC struct { STRPTR String; BOOL Value; } BoolTable[] =
  276.                     {
  277.                         "on",    TRUE,
  278.                         "true",    TRUE,
  279.                         "yes",    TRUE,
  280.                         "y",    TRUE,
  281.                         "t",    TRUE,
  282.  
  283.                         "off",    FALSE,
  284.                         "false",FALSE,
  285.                         "no",    FALSE,
  286.                         "n",    FALSE,
  287.                         "f",    FALSE,
  288.  
  289.                         NULL
  290.                     };
  291.  
  292.                     WORD i;
  293.  
  294.                     RTS_CTS = -1;
  295.  
  296.                     for(i = 0 ; BoolTable[i] . String ; i++)
  297.                     {
  298.                         if(!Stricmp(BoolTable[i] . String,Array[ARG_RTSCTS]))
  299.                         {
  300.                             RTS_CTS = BoolTable[i] . Value;
  301.                             break;
  302.                         }
  303.                     }
  304.                 }
  305.                 else
  306.                     RTS_CTS = -1;
  307.  
  308.                 if(Array[ARG_INIT])
  309.                     Init = Array[ARG_INIT];
  310.                 else
  311.                     Init = "ATE1V1Q0^M";
  312.  
  313.                 if(Array[ARG_DIAL])
  314.                     Dial = Array[ARG_DIAL];
  315.                 else
  316.                     Dial = "~~ATD";
  317.  
  318.                 if(Array[ARG_NUMBER])
  319.                     Number = Array[ARG_NUMBER];
  320.                 else
  321.                     Number = "01910";
  322.  
  323.                 if(Array[ARG_HANGUP])
  324.                     Hangup = Array[ARG_HANGUP];
  325.                 else
  326.                     Hangup = "~~+++~~ATH0^M";
  327.  
  328.                 if(Array[ARG_FILE])
  329.                     File = Array[ARG_FILE];
  330.                 else
  331.                     File = NULL;
  332.  
  333.                 if(Array[ARG_SCALEX])
  334.                     ScaleX = *(LONG *)Array[ARG_SCALEX];
  335.                 else
  336.                     ScaleX = 1;
  337.  
  338.                 if(Array[ARG_SCALEY])
  339.                     ScaleY = *(LONG *)Array[ARG_SCALEY];
  340.                 else
  341.                     ScaleY = 1;
  342.  
  343.                 if(Array[ARG_TEXT])
  344.                     TextOnly = TRUE;
  345.                 else
  346.                     TextOnly = FALSE;
  347.  
  348.                 if(Array[ARG_DIRECT])
  349.                     Direct = TRUE;
  350.                 else
  351.                     Direct = FALSE;
  352.  
  353.                 if(Array[ARG_PUBSCREEN])
  354.                     Screen = Array[ARG_PUBSCREEN];
  355.                 else
  356.                     Screen = NULL;
  357.  
  358.                 Error = App.Open(Screen,ScaleX,ScaleY,TextOnly,Direct,File ? File : Device,Unit,Baud,RTS_CTS);
  359.  
  360.                 if(Error)
  361.                     Printf("xBTX: %s\n",Error);
  362.                 else
  363.                 {
  364.                     if(App.AppModem)
  365.                     {
  366.                         if(App.AppModem->Connect(Init,Dial,Number,Hangup) == MODEM_Connect)
  367.                             App.DoEvent();
  368.                         else
  369.                             App.WaitForUserInput();
  370.                     }
  371.                     else
  372.                         App.DoEvent();
  373.  
  374.                     App.Close();
  375.                 }
  376.  
  377.                 FreeArgs(Args);
  378.  
  379.                 exit(RETURN_OK);
  380.             }
  381.             else
  382.             {
  383.                 PrintFault(IoErr(),"xBTX");
  384.  
  385.                 exit(RETURN_FAIL);
  386.             }
  387.         }
  388.         else
  389.             exit(RETURN_FAIL);
  390.     }
  391. }
  392.